دستور Group By :
در هنگام استفاده از برخی از توابع درون ساخته SQL که عمل محاسبه ( مثل مجموع و ميانگين ) را بر روی داده ها انجام می دهند ، اين مشکل وجود دارد که اين توابع قادر به جدا کردن و متمايز کردن اطلاعات موجود در دو ستون نسبت به هم نيستند و نتايج محاسبات را به صورت کلی برای همه آنها در نظر می گيرند .
از دستور Group By برای دسته بندی يک ستون بر حسب مقادير مشابه فيلدهای يک ستون ديگر استفاده می شود .
شکل کلی استفاده از اين دستور به صورت زير است :
Select نام ستون 1 , Sum ( 2 نام ستون ) ّFrom نام جدول Group By نام ستون 1 ;
مثال : فرض کنيد جدولی به صورت زير برای نمرات 2 دانشجو داريم :
Ali Ahmadi |
18 |
Reza Hoseini |
17 |
Ali Ahmadi |
20 |
Reza Hoseini |
13 |
در صورت عدم استفاده از دستور Group By در تابع Sum خروجی زير را خواهيم داشت :
Select Sum ( Grade ) As مجموع نمرات
From Class ; |
|
- مسلما خروجی فوق مورد نظر برنامه ساز نيست . می توان با استفاده از دستور Group By ، مجموع نمرات را برای دانشجويان بر حسب ستون Name به صورت جدا محاسبه کرد و به صورت زير نمايش داد :
Select Name ,Sum ( Grade ) As مجموع نمرات
From Class
Group By Name ; |
Ali Ahmadi |
38 |
Reaz Hoseini |
30 |
|
مثال 2 : از جدول Students و Selection مجموع نمرات هر دانشجو را به همراه نام و نام خانوادگی ، که بر حسب نام خانوادگی مرتب شده باشد نمايش دهيد :
41252214 |
Ahmad |
Rezaee |
Hard Ware |
Tehran |
18 |
10724113 |
Ehsan |
Amiri |
Soft Ware |
Karaj |
14 |
10254861 |
Zahra |
Hosini |
Hard Ware |
Tehran |
17 |
27365187 |
Sahar |
Ahmadi |
Soft Ware |
Bam |
16 |
35654415 |
Hesam |
Razavi |
Soft Ware |
Tehran |
19 |
41252214 |
1011 |
2 |
85 - 86 |
16 |
10724113 |
1011 |
2 |
85 - 86 |
14 |
41252214 |
1012 |
1 |
85 - 86 |
17 |
10724113 |
1012 |
1 |
85 - 86 |
11 |
10254861 |
1013 |
2 |
85 - 86 |
13 |
10254861 |
1011 |
2 |
84 - 85 |
8 |
27365187 |
1012 |
1 |
84 - 85 |
19 |
27365187 |
1013 |
1 |
84 - 85 |
16 |
35654415 |
1011 |
2 |
84 - 85 |
9 |
35654415 |
1013 |
2 |
84 - 85 |
17 |
Select Name , Family , Sum ( Selection.Grade ) As مجموع نمرات
From Students , Selection
Where Students.Student ID = Selection.Student ID
Group By Name , Family
Order By Family; |
Sahar |
Ahmadi |
35 |
Ehsan |
Amiri |
25 |
Zahra |
Hoseini |
21 |
Hesam |
Razavi |
26 |
Ahmad |
Rezaee |
33 |
|
|
امتیاز مطلب : 15
|
تعداد امتیازدهندگان : 3
|
مجموع امتیاز : 3